import com.beans.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-09
 * Time: 11:52
 */

public class App1 {
    public static void main(String[] args) {
        //1.获取spring 上下文
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");

        //获取bean
        UserComponent userComponent = context.getBean("userComponent",UserComponent.class);
        userComponent.sayHi();
        userComponent.userController.say();
        userComponent.userController.userRepository.say();
        userComponent.userController.userRepository.userService.say();
        //这里演示的就是层层注入的过程 就是造车一样
        // 轮胎注入地盘  地盘注入车身 车身完成造成

        //还有一个问题 就是最上层的这个里 使用了Bean注解 存入的方法 就算没有调用它 也运行了 ？？？
        //而且时最先运行的  应该涉及到Bean生命周期的问题


        UserRepository userRepository = context.getBean("userRepository",UserRepository.class);
        userRepository.say1();

        //
        UserController userController = context.getBean(UserController.class);
        System.out.println(userController.user);


        //归根结底 通过类型来获取 这个类型只能注入一次 当有两个方法都返回user对象的时候
        User user = context.getBean(User.class);
        System.out.println(user);

        //以上面一样  只是获取Bean的方法不同的不会报错
        //关键是Bean的命名 规则 和 方法的命名规则不一样
        User user1 = context.getBean("user",User.class);
        System.out.println(user1);


    }
}
